/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import org.apache.log4j.Logger;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.factories.*;

/**
 *
 * @author DINA
 */
public class ResolucionDespachador {

    private static final Logger logger = Logger.getLogger(ResolucionDespachador.class);

    public static List<ResolucionBean> obtenerResolucion(int expediente) throws SQLException {
        ResolucionBean resolucion =null;
        List<ResolucionBean> lstResolucion = new ArrayList<ResolucionBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NRESO_IDENTIFICADOR,NRESO_NUMERO,";
            sql += " NEXPE_IDENTIFICADOR,DRESO_FECHA,";
            sql += " CRESO_FOLIOS, CRESO_SUMILLA, CRESO_VISTO, CRESO_SIGLAS";
            sql += " FROM PERMA_RESOLUCION";
            sql += " WHERE NEXPE_IDENTIFICADOR = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, expediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                resolucion = new ResolucionBean();
                resolucion.setNreso_identificador(rs.getInt("NRESO_IDENTIFICADOR"));
                resolucion.setNreso_numero(rs.getString("NRESO_NUMERO"));
                resolucion.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                resolucion.setDreso_fecha(rs.getDate("DRESO_FECHA"));
                resolucion.setCreso_folios(rs.getString("CRESO_FOLIOS"));
                resolucion.setCreso_sumilla(rs.getString("CRESO_SUMILLA"));
                resolucion.setCreso_visto(rs.getString("CRESO_VISTO"));
                resolucion.setCreso_siglas(rs.getString("CRESO_SIGLAS"));
                lstResolucion.add(resolucion);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstResolucion;
    }

    public static List<DetalleResolucionBean> obtenerDetalleResolucion(int nreso_identificador, int tipo) throws SQLException {
        List<DetalleResolucionBean> lista = new ArrayList<DetalleResolucionBean>();
        DetalleResolucionBean resolucion = null;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            StringBuilder sql =  new StringBuilder();
            sql.append(" SELECT NDERES_IDENTIFICADOR,NRESO_IDENTIFICADOR,NDERES_TIPO,CDERES_DETALLE ");
            sql.append(" FROM PERMA_DETALLERESOLUCION WHERE NRESO_IDENTIFICADOR = ? and NDERES_TIPO = ? ");
            sql.append(" ORDER BY NDERES_IDENTIFICADOR ASC ");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setInt(1, nreso_identificador);
            ps.setInt(2, tipo);
            logger.debug(sql.toString() + " NRESO_IDENTIFICADOR= " + nreso_identificador + "; tipo=" +tipo );
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                resolucion = new DetalleResolucionBean();
                resolucion.setNderes_identificador(rs.getInt("NDERES_IDENTIFICADOR"));
                resolucion.setNreso_identificador(rs.getInt("NRESO_IDENTIFICADOR"));
                resolucion.setNderes_tipo(rs.getInt("NDERES_TIPO"));
                resolucion.setCderes_detalle(rs.getString("CDERES_DETALLE"));
                lista.add(resolucion);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lista;
    }

    public static boolean eliminarResolucionContenido(Integer dereso_identificador){
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
                String sql = "delete from PERMA_DETALLERESOLUCION  ";
                sql += " where  NDERES_IDENTIFICADOR = ? ";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setInt(1, dereso_identificador );
                ps.executeUpdate();
                resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static boolean ingresarResolucionContenido(ResolucionDetalleBean resolucion) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            if( resolucion.getNderes_identificador() == 0 || resolucion.getNderes_identificador() == -1 ){
                System.out.println("INSERTADO RESOLUCION DETALLE");
                String sql = " INSERT INTO PERMA_DETALLERESOLUCION (NDERES_IDENTIFICADOR,";
                sql += " NRESO_IDENTIFICADOR,NDERES_TIPO,CDERES_DETALLE ) ";
                sql += " VALUES (SEQ_DETALLERESOLUCION.NEXTVAL,?,?,?)";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setInt(1,resolucion.getNreso_identificador());
                ps.setInt(2,resolucion.getNderes_tipo());
                ps.setString(3, resolucion.getCderes_detalle());
                ps.executeUpdate();
                resultado = true;
            }else{
                System.out.println("ACTUALIZANDO DETALLE RESOLUCION");
                String sql = "UPDATE PERMA_DETALLERESOLUCION set  ";
                sql += " CDERES_DETALLE =? where  NDERES_IDENTIFICADOR = ? ";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1, resolucion.getCderes_detalle());
                ps.setInt(2,resolucion.getNderes_identificador());
                ps.executeUpdate();
                resultado = true;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static boolean ingresarResolucion(ResolucionBean resolucion) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = " INSERT INTO PERMA_RESOLUCION (NRESO_IDENTIFICADOR,NRESO_NUMERO,";
            sql += " NEXPE_IDENTIFICADOR,";
            sql += " CRESO_FOLIOS, CRESO_SUMILLA, CRESO_VISTO, CRESO_SIGLAS) ";
            sql += " VALUES (SEQ_RESOLUCION.NEXTVAL,?,?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,resolucion.getNreso_numero());
            ps.setInt(2,resolucion.getNexpe_identificador());
            ps.setString(3,resolucion.getCreso_folios());
            ps.setString(4,resolucion.getCreso_sumilla());
            ps.setString(5,resolucion.getCreso_visto());
            ps.setString(6, resolucion.getCreso_siglas());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static String ultimoResolucion() throws SQLException {
        String res = "";
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = " SELECT SEQ_RESOLUCION.CURRVAL as val from dual ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                res = ""+ rs.getInt("val");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return res;
    }

    public static boolean actualizarResolucion(ResolucionBean resolucion) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            StringBuilder sql = new StringBuilder();
            sql.append(" UPDATE PERMA_RESOLUCION SET NRESO_NUMERO=?,");
            sql.append(" NEXPE_IDENTIFICADOR=?,DRESO_FECHA=?,");
            sql.append(" CRESO_FOLIOS=?,");
            sql.append(" CRESO_SUMILLA=?,");
            sql.append(" CRESO_VISTO=?,");
            sql.append(" CRESO_SIGLAS=?");
            sql.append(" WHERE NRESO_IDENTIFICADOR=?");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setString(1,resolucion.getNreso_numero());
            ps.setInt(2,resolucion.getNexpe_identificador());
            ps.setDate(3,resolucion.getDreso_fecha());
            ps.setString(4,resolucion.getCreso_folios());
            ps.setString(5,resolucion.getCreso_sumilla());
            ps.setString(6,resolucion.getCreso_visto());
            ps.setString(7, resolucion.getCreso_siglas());
            ps.setInt(8, resolucion.getNreso_identificador());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

      public static boolean aprobarResolucion(ResolucionBean resolucion) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            StringBuilder sql = new StringBuilder();
            sql.append(" UPDATE PERMA_RESOLUCION SET NRESO_NUMERO=?,");
            sql.append(" DRESO_FECHA=?,");
            sql.append(" NRESO_APROBADO=?");
            sql.append(" WHERE NRESO_IDENTIFICADOR=?");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setString(1,resolucion.getNreso_numero());
            ps.setDate(2,resolucion.getDreso_fecha());
            ps.setInt(3,resolucion.getNreso_aprobar());
            ps.setInt(4, resolucion.getNreso_identificador());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static ResolucionBean obtenerResolucionById(int nres_identificador) throws SQLException {
        ResolucionBean resolucion =null;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            StringBuilder sql = new StringBuilder();
            sql.append( " SELECT R.NRESO_IDENTIFICADOR,R.NRESO_NUMERO, " );
            sql.append( " R.NEXPE_IDENTIFICADOR,R.DRESO_FECHA, ");
            sql.append( " R.CRESO_FOLIOS, R.CRESO_SUMILLA, R.CRESO_VISTO, R.CRESO_SIGLAS, ");
            sql.append( " pp.npepo_identificador ");
            sql.append( " FROM PERMA_RESOLUCION R ");
            sql.append( " INNER JOIN  sisma_expediente E on r.nexpe_identificador = e.nexpe_identificador ");
            sql.append( " inner join perma_personalpolicial pp on e.npepo_identificador = pp.npepo_identificador ");
            sql.append( " WHERE NRESO_IDENTIFICADOR = ?");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setInt(1, nres_identificador);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                resolucion = new ResolucionBean();
                resolucion.setNreso_identificador(rs.getInt("NRESO_IDENTIFICADOR"));
                resolucion.setNreso_numero(rs.getString("NRESO_NUMERO"));
                resolucion.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                resolucion.setDreso_fecha(rs.getDate("DRESO_FECHA"));
                resolucion.setCreso_folios(rs.getString("CRESO_FOLIOS"));
                resolucion.setCreso_sumilla(rs.getString("CRESO_SUMILLA"));
                resolucion.setCreso_visto(rs.getString("CRESO_VISTO"));
                resolucion.setCreso_siglas(rs.getString("CRESO_SIGLAS"));
                resolucion.setNpepo_identificador(rs.getInt("npepo_identificador"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resolucion;
    }


}
